package edu.ucsur.tp.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import edu.ucsur.tp.beans.UsuarioBean;
import edu.ucsur.tp.beans.UsuarioPerfilBean;
import edu.ucsur.tp.data.MyData;
import edu.ucsur.tp.data.ut;


public class UsuarioDAOMyBatis implements UsuarioDAO {
  
  private SqlSessionFactory sqlSessionFactory;
  private SqlSession session = null;
  
  public UsuarioDAOMyBatis(SqlSessionFactory sqlSessionFactory) {
    this.sqlSessionFactory = sqlSessionFactory;
  }

  @Override
  public List<UsuarioBean> obtenerTodos() {
    try {
      session = sqlSessionFactory.openSession();
      return session.selectList("edu.ucsur.tp.dao.UsuarioMapper.obtenerTodos");
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
    return null;
  }

  @Override
  public UsuarioBean obtener(String codigo) {
    try {
      session = sqlSessionFactory.openSession();
      return session.selectOne("edu.ucsur.tp.dao.UsuarioMapper.obtener", codigo);
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
    return null;
  }

  @Override
  public void eliminar(String codigo) {
    try {
      session = sqlSessionFactory.openSession(true);
      session.delete("edu.ucsur.tp.dao.UsuarioMapper.eliminar", codigo);
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
  }


@Override
public void insertar(UsuarioBean u) {
	try {
	      session = sqlSessionFactory.openSession(true);
	      session.insert("edu.ucsur.tp.dao.UsuarioMapper.insertar", u);
	    } catch (Exception ex) {
	      ex.printStackTrace();
	    } finally {
	      session.close();
	    }
}

@Override
public void actualizar(UsuarioBean u) {
	 try {
	      session = sqlSessionFactory.openSession(true);
	      session.update("edu.ucsur.tp.dao.UsuarioMapper.actualizar", u);
	    } catch (Exception ex) {
	      ex.printStackTrace();
	    } finally {
	      session.close();
	    }
}

@Override
public List<String> ListaPerfiles() {
	List<String> Lista = new ArrayList<String>();
	String Item = "";
	List<UsuarioPerfilBean> per;
	
	try {
		
		session = sqlSessionFactory.openSession();
		per = session.selectList("edu.ucsur.tp.dao.UsuarioMapper.ListaPefiles");
		
		for (UsuarioPerfilBean p : per){
			Item = p.getId_perfil() + " - " + p.getNombre();
			Lista.add(Item);
		} 
	} catch (Exception e) {
		e.printStackTrace();
	}
	
	return Lista;
}

@Override
public boolean UserLogin(String User, char[] Pass) {
	String passString = new String(Pass); 
	UsuarioBean usu;
	
	try {
      session = sqlSessionFactory.openSession();
      usu = session.selectOne("edu.ucsur.tp.dao.UsuarioMapper.obtener", User);
      
      if (usu.getId_usuario() == null ) return false;
      
      if (usu.getClave().equals(ut.ToMd5(passString)))
    	  return true;
      else
    	  return false;
      
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
    return false;
		
}

}
